Программирование драйверов Windows

Секции [ServiceInstall]


Секции типа [ServiceInstall] предназначены для заполнения или модификации подраздела Системного Реестра, описывающего загрузку драйвера в сервисном подразделе для данного драйвера, а именно &#8212 в подразделе HKLM\System\CurrentControlSet\Services\&#60service-name&#62. Здесь &#60service-name&#62 &#8212 это значение поля service-name, указанное в директиве AddService в секции [DDInstall.Xxx.Services]. Конкретное имя секции типа [ServiceInstall] выбирается разработчиком inf-файла. Декорирование имен секций данного типа (с целью отразить ее предназначение для конкретной версии системы) уже не имеет смысла и не воспринимается, поскольку эта принадлежность должна была быть введена раньше &#8212 на уровне секций [DDInstall.Xxx.Services]. Описание директив для секций типа [ServiceInstall] приводится в таблице 12.10, причем директивы ServiceType, StartType, ErrorControl и ServiceBinary являются обязательными. Эти директивы однозначно определяют информацию (значения одноименных параметров), которая появится в Системном Реестре в сервисном подразделе для данного драйвера &#8212 пример, касающийся драйвера Example.sys, рассмотрен в Приложении В.

Таблица 12.10. Записи секции [ServiceInstall]



Запись Значение поля
DisplayName Развернутое наименование драйвера, выводится на экран Мастером Установки Оборудования
Description Краткое описание назначения драйвера или сервиса, выводится Мастером Установки Оборудования
ServiceType Для драйвера режима ядра 0x01 (см. также Приложение В)
StartType Определяет момент загрузки драйвера

0 &#8212 SERVICE_BOOT_START &#8212 во время загрузки системы (WDM драйверы, опирающиеся на системные драйверы не должны использовать такой тип запуска)

1 &#8212 SERVICE_SYSTEM_START &#8212 во время инициализации системы (WDM драйверы, опирающиеся на системные драйверы должны использовать такой тип запуска с осторожностью)

2 &#8212 SERVICE_AUTO_START &#8212 автостарт после запуска системы средствами SCM Менеджера (WDM драйверы и драйверы РпР устройств не должны указывать этот код запуска)

3 &#8212 SERVICE_DEMAND_START &#8212 старт по требованию: либо по запросу РnР Менеджера при обнаружении РnР устройства, либо по явному запросу приложения при помощи вызовов SCM Менеджера

4 &#8212 SERVICE_DISABLED &#8212 не может стартовать

ErrorControl Распоряжение относительно возникающих ошибок:

0 &#8212 игнорировать все ошибки при загрузке драйвера

1 &#8212 показывать сообщения об ошибках пользователю

2 &#8212 выполнить рестарт с набором параметров, обеспечившим последнюю удачную загрузку (LastKnownGood), игнорировать дальнейшие ошибки

3 &#8212 выполнить рестарт с набором параметров, обеспечившим последнюю удачную загрузку (LastKnownGood), контроль ошибок если таковые возникнут со стороны пользователя

ServiceBinary Путь к файлу драйвера (может включать коды dirid, таблица 12.6)
AddReg Вводит (через запятую) ссылки на секции типа [AddReg], в которых описываются действия над Реестром, которые следует выполнить дополнительно к описанным в данной секции
LoadOrderGroup Идентифицирует группу, в которой должен загружаться драйвер (возможные группы можно увидеть в разделе Системного Реестра HKLM\System\CurrentControlSet\Control\GroupOrderList)
Dependencies Указывает сервисы (драйверы) или группы загрузки, которые должны быть загружены к моменту загрузки драйвера. Имена групп выделяются при вводе предшествующим им знаком '+'.

Директивы LoadOrderGroup и Dependencies широко используются при установке драйверов SCSI устройств и фильтр-драйверов.

Директива DelReg, которая также может быть в составе [ServiceInstall], вводит ссылки на секции, описывающие удаление из Системного Реестра информации для уже установленных программных продуктов. Используется эта директива редко.

Остальные директивы, возможные для ввода в секциях типа [ServiceInstall], а именно, StartName и BitReg практически не используются.



Содержание раздела